/**
 * Procesadores de Lenguaje, curso 2009-2010
 * @author grupo 02
 *
 */

package compilador;


import java.io.BufferedReader;
import java.io.FileReader;
import interprete.MaquinaP;


public class Interprete {

    private static MaquinaP mP;


    private static void uso(){
        System.out.println("Uso:");
        System.out.println("Interprete <programa a ejecutar> -n | -t");
        System.out.println("-n Ejecucion modo normal");
        System.out.println("-t Ejecucion modo traza");
    }


    private static void intro(){
        System.out.println("\nInterprete Maquina P.");
        System.out.println("Procesadores de Lenguaje, curso 2009-2010 ");
        System.out.println("Grupo numero 02\n");
    }


    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        boolean traza=false;
        mP = new MaquinaP();
        intro();
        if (args.length != 2){
            System.out.println("Numero de argumentos incorrecto");
            uso();
            System.exit(-1);
        }


        if (args[1].equals("-t"))
            //traza
            traza=true;
        else if (args[1].equals("-n"))
            //normal
            traza=false;
        else{
            System.out.println("argumento incorrecto");
            uso();
            System.exit(-1);
        }

        mP.inicia(traza);

        try{

        //DataInputStream in = new DataInputStream( new BufferedInputStream(new FileInputStream(args[0])));
        BufferedReader br = new BufferedReader(new FileReader(args[0]));
        String line;

        while ((line=br.readLine()) != null){

            line.trim();

            String[] fields = line.split(" ");
            switch (fields.length){

                case 1: //instruccion sin argumentos
                        mP.loadInstruction(fields[0]);
                        break;
                case 2: //instruccion con un argumento
                        mP.loadInstruction(fields[0],fields[1]);
                        break;


                default: //Error, lanzar exception.
                         System.out.println("mas campos de los esperados");
                         break;

            }

        }
        br.close();

        }
        catch(Exception ex) {
            System.out.println(ex.getMessage());
            }
      //Ejecutar
        mP.run();

    }

}
